/****
 * 与后台交互的Action脚本
 * @author jiangwx
 * 新建 2015-12-28 版本 0.0.1
 */
"use strict";

//// 设置AJAX的全局默认选项
//$.ajaxSetup({
//	aysnc : false, // 默认同步加载
//	type : "POST", // 默认使用POST方式
//	headers : { // 默认添加请求头
//		"Author" : "CodePlayer",
//		"Powered-By" : "CodePlayer"
//	},
//	error : function(jqXHR, textStatus, errorMsg) {
//		// 出错时默认的处理函数
//		// 提示形如：发送AJAX请求到"/index.html"时出错[404]：Not Found
//		alert('发送AJAX请求到"' + this.url + '"时出错[' + jqXHR.status + ']：'+ errorMsg);
//	}
//});

Date.prototype.format = function(fmt) {
    var o = {
        "M+": this.getMonth() + 1, //月份 
        "d+": this.getDate(), //日 
        "h+": this.getHours(), //小时 
        "m+": this.getMinutes(), //分 
        "s+": this.getSeconds(), //秒 
        "q+": Math.floor((this.getMonth() + 3) / 3), //季度 
        "S": this.getMilliseconds() //毫秒 
    };
    if (/(y+)/.test(fmt)) {
        fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    }
    for (var k in o) {
        if (new RegExp("(" + k + ")").test(fmt)) {
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
        }
    }
    return fmt;
}
var EncryptJS = {
    Encrypt: function(pureText) {
        return rsa.encrypt(pureText);
    }
};

var DebugJS = {
    /** 0表示关闭DEBUG 1表示启动DEBUG **/
    _DEBUG: 1,
    ShowObject: function(obj, name) {
        if (DebugJS._DEBUG == 1) {
            var s = '';
            for (var i in obj) {
                s += i;
                s += '\n';
            }
            if (typeof(name) == 'undefined') {
                alert("内属性 ===》》\n" + s);
            } else {
                alert(name + " ===》》\n" + s);
            }
        }
    }
};

var ActionJS = {
    _DataType: {
        _JSONP: 'jsonp',
        _JSON: 'json',
        _XML: 'xml',
        _HTML: 'html',
        _SCRIPT: 'script',
        _TEXT: 'text',
    },
    _Timeout: 15000,
    _PreAjax: function() {
        //		$.ajaxPrefilter("json script",function(options, originalOptions, jqXHR) {
        //			var data = options.data;
        //			if (data != null) {
        //				var list = data.split("&");
        //				var newList = "";
        //				for (var i = 0; i < list.length; i++) {
        //					var kv = list[i].split("=");
        ////					newList += (kv[0] + "=" + encodeURIComponent(EncryptJS.Encrypt(kv[1])));
        //					newList += (kv[0] + "=" + kv[1]);
        //					if(i < list.length -1)
        //					newList =+ "&";
        //				}
        //				//if(newList.indexOf(newList.length - 1) == "&")
        //				//newList = newList.substring(0, newList.length - 1);
        //				options.data = newList;
        //			}
        //		});
    },
    /**
     * Ajax方式提交数据
     * url 			目的地址		 HTTP格式
     * postdata		所需要提交的数据 JSON格式
     * success		成功时返回		 FUNCTION
     */
    AjaxPostSP: function(url, postData, success) {
        $.ajax({
            type: 'POST',
            url: url,
            timeout: ActionJS._Timeout,
            data: postData,
            success: success,
            dataType: ActionJS._DataType._JSON,
            error: function(xhr, errorInfo, ex) {
                if ('timeout' == errorInfo) {
                    alert("请求超时");
                    //AlertJS.Message('请求超时', { icon: 6 });
                } else if ('parsererror' == errorInfo) {
                    alert("返回参数格式异常");
                   // AlertJS.Message('返回参数格式异常', { icon: 6 });
                } else if ('notmodified' == errorInfo) {
                    alert("数据参数异常");
                   // AlertJS.Message('数据参数异常', { icon: 6 });
                } else if ('error' == errorInfo) {
                    alert("网络异常");
                    console.log(errorInfo);
                    //AlertJS.Message('网络异常', { icon: 6 });
                } else {
                    alert("未知异常");
                   // AlertJS.Message('未知异常：' + errorInfo, { icon: 6 });
                }
            }
        });
    },
    /**
     * Ajax 同步方式提交数据
     * url 			目的地址		 HTTP格式
     * postdata		所需要提交的数据 JSON格式
     * success		成功时返回		 FUNCTION
     */
    AjaxPostSNP: function(url, postData, success) {
        $.ajax({
            type: 'POST',
            url: url,
            async: false,
            timeout: ActionJS._Timeout,
            data: postData,
            success: success,
            dataType: ActionJS._DataType._JSON,
            error: function(xhr, errorInfo, ex) {
                if ('timeout' == errorInfo) {
                    AlertJS.Message('请求超时', { icon: 6 });
                } else if ('parsererror' == errorInfo) {
                    AlertJS.Message('返回参数格式异常', { icon: 6 });
                } else if ('notmodified' == errorInfo) {
                    AlertJS.Message('数据参数异常', { icon: 6 });
                } else if ('error' == errorInfo) {
                    AlertJS.Message('网络异常', { icon: 6 });
                } else {
                    AlertJS.Message('未知异常：' + errorInfo, { icon: 6 });
                }
            }
        });
    },
    /**
     * Ajax方式提交数据
     * url 			目的地址		 HTTP格式
     * postdata		所需要提交的数据 JSON格式
     * success		成功时返回		 FUNCTION
     * failure		失败时返回		 FUNCTION
     */
    AjaxPostTM: function(url, postData, success, timeout) {
        $.ajax({
            type: 'POST',
            url: url,
            timeout: timeout,
            data: postData,
            success: success,
            dataType: ActionJS._DataType._JSON,
            error: function(xhr, errorInfo, ex) {
                if ('timeout' == errorInfo) {
                    AlertJS.Message('请求超时', { icon: 6 });
                } else if ('parsererror' == errorInfo) {
                    AlertJS.Message('返回参数格式异常', { icon: 6 });
                } else if ('notmodified' == errorInfo) {
                    AlertJS.Message('数据参数异常', { icon: 6 });
                } else if ('error' == errorInfo) {
                    AlertJS.Message('网络异常', { icon: 6 });
                } else {
                    AlertJS.Message('未知异常：' + errorInfo, { icon: 6 });
                }
            }
        });
    },
    /**
     * Ajax方式提交数据
     * url 			目的地址		 HTTP格式
     * postdata		所需要提交的数据 JSON格式
     * success		成功时返回		 FUNCTION
     * failure		失败时返回		 FUNCTION
     * timeout		超时时间单位毫秒 INT 
     */
    AjaxPostDT: function(url, postData, success, timeout, dataType) {
        $.ajax({
            type: 'POST',
            url: url,
            timeout: timeout,
            dataType: dataType,
            data: postData,
            success: success,
            error: function(xhr, errorInfo, ex) {
                if ('timeout' == errorInfo) {
                    AlertJS.Message('请求超时', { icon: 6 });
                } else if ('parsererror' == errorInfo) {
                    AlertJS.Message('返回参数格式异常', { icon: 6 });
                } else if ('notmodified' == errorInfo) {
                    AlertJS.Message('数据参数异常', { icon: 6 });
                } else if ('error' == errorInfo) {
                    AlertJS.Message('内部异常', { icon: 6 });
                } else {
                    AlertJS.Message('未知异常：' + errorInfo, { icon: 6 });
                }
            }
        });
    },
    /**
     * Ajax方式提交数据
     * url 			目的地址		 HTTP格式
     * postdata		所需要提交的数据 JSON格式
     * success		成功时返回		 FUNCTION
     * failure		失败时返回		 FUNCTION
     * timeout		超时时间单位毫秒 INT 
     */
    AjaxHTML: function(url, postData, success) {
        $.ajax({
            type: 'POST',
            url: url,
            timeout: ActionJS._Timeout,
            dataType: ActionJS._DataType._HTML,
            data: postData,
            success: success,
            error: function(xhr, errorInfo, ex) {
                if ('timeout' == errorInfo) {
                    AlertJS.Message('请求超时', { icon: 6 });
                } else if ('parsererror' == errorInfo) {
                    AlertJS.Message('返回参数格式异常', { icon: 6 });
                } else if ('notmodified' == errorInfo) {
                    AlertJS.Message('数据参数异常', { icon: 6 });
                } else if ('error' == errorInfo) {
                    AlertJS.Message('内部异常', { icon: 6 });
                } else {
                    AlertJS.Message('未知异常：' + errorInfo, { icon: 6 });
                }
            }
        });
    },
    /** 
     * Ajax GET 方式提交数据
     * url 			目的地址		 HTTP格式
     * postdata		所需要提交的数据 JSON格式
     * success		成功时返回		 FUNCTION
     * failure		失败时返回		 FUNCTION
     * timeout		超时时间单位毫秒 INT 
     */
    AjaxGetHTML: function(url, postData, success) {
        $.ajax({
            type: 'GET',
            url: url,
            timeout: ActionJS._Timeout,
            dataType: ActionJS._DataType._HTML,
            data: postData,
            success: success,
            error: function(xhr, errorInfo, ex) {
                if ('timeout' == errorInfo) {
                    AlertJS.Message('请求超时', { icon: 6 });
                } else if ('parsererror' == errorInfo) {
                    AlertJS.Message('返回参数格式异常', { icon: 6 });
                } else if ('notmodified' == errorInfo) {
                    AlertJS.Message('数据参数异常', { icon: 6 });
                } else if ('error' == errorInfo) {
                    AlertJS.Message('内部异常', { icon: 6 });
                } else {
                    AlertJS.Message('未知异常：' + errorInfo, { icon: 6 });
                }
            }
        });
    },

    /**
     * Ajax方式提交数据
     * url 			目的地址		 HTTP格式
     * postdata		所需要提交的数据 JSON格式
     * success		成功时返回		 FUNCTION
     * failure		失败时返回		 FUNCTION
     * timeout		超时时间单位毫秒 INT 
     * dataType		返回类型 		 String格式 
     */
    AjaxPost: function(url, postData, success, timeout, dataType, error) {
        /** 重载 **/
        var len = arguments.length;
        if (len == 3) {
            ActionJS.AjaxPostSP(url, postData, success);
        } else if (len == 4) { //timeout
            ActionJS.AjaxPostTM(url, postData, success, timeout);
        } else if (len == 5) { //dataType
            ActionJS.AjaxPostDT(url, postData, success, timeout, dataType);
        } else if (len == 6) { //error
            $.ajax({
                type: 'POST',
                url: url,
                timeout: timeout,
                data: postData,
                dataType: dataType,
                success: success,
                error: error
            });
        }
    }
}

// js extend add 20200818
$.fn.extend({
    nodeName: function(elem, name) {
        return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase();
    }
});
$.fn.extend({
    serializeArray: function() {
        return this.map(function() {
                return jQuery.nodeName(this, "form") ?
                    jQuery.makeArray(this.elements) : this;
            })
            .filter(function() {
                return this.name && !this.disabled &&
                    (this.checked || /select|textarea/i.test(this.nodeName) ||
                        /text|hidden|password/i.test(this.type));
            })
            .map(function(i, elem) {
                var val = jQuery(this).val();
                return val == null ? null :
                    val.constructor == Array ?
                    jQuery.map(val, function(val, i) {
                        return { name: elem.name, value: val };
                    }) : { name: elem.name, value: val };
            }).get();
    }
});
$.fn.extend({
    // 调用方式：$("xxxxx").getform();
    getform: function() {
        var obj = {};
        var array = $(this).serializeArray();
        $.each(array, function() {
            obj[this.name] = this.value;
        });
        return obj;
    },
    // 调用方式： $("xxx").setform(json);
    setform: function(jsonValue) {
        var obj = this;
        $.each(jsonValue, function(name, ival) {
            var $input = obj.find($.parseHTML("input:[name=" + name + "]"));
            if ($input.attr("type") == "radio" || $input.attr("type") == "checkbox") {
                $input.each(function() {
                    if (Object.prototype.toString.apply(ival) == '[object Array]') { // 是复选框，并且是数组
                        for (var i = 0; i < ival.length; i++) {
                            if ($(this).val() == ival[i])
                                $(this).attr("checked", "checked");
                        }
                    } else {
                        if ($(this).val() == ival)
                            $(this).attr("checked", "checked");
                    }
                });
            } else if ($input.attr("type") == "textarea") { // 多 行文本框
                obj.find("[name=" + name + "]").val(ival);
            } else {
                obj.find("[name=" + name + "]").val(ival);
            }
        });
    }

});
$.fn.extend({
    serializeJson: function() {
        var serializeObj = {};
        var array = this.serializeArray();
        var str = this.serialize();
        $(array).each(function() {
            if (serializeObj[this.name]) {
                if ($.isArray(serializeObj[this.name])) {
                    serializeObj[this.name].push(this.value);
                } else {
                    serializeObj[this.name] = [serializeObj[this.name], this.value];
                }
            } else {
                serializeObj[this.name] = this.value;
            }
        });
        return serializeObj;
    }
});